home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / Clueless.swf / scripts / fl / video / SMILManager.as < prev    next >
Encoding:
Text File  |  2011-10-17  |  11.1 KB  |  293 lines

  1. package fl.video
  2. {
  3.    import flash.events.*;
  4.    import flash.net.URLLoader;
  5.    import flash.net.URLRequest;
  6.    
  7.    use namespace flvplayback_internal;
  8.    
  9.    public class SMILManager
  10.    {
  11.       
  12.       public static const VERSION:String = "2.1.0.14";
  13.       
  14.       public static const SHORT_VERSION:String = "2.1";
  15.        
  16.       
  17.       flvplayback_internal var width:int;
  18.       
  19.       flvplayback_internal var xmlLoader:URLLoader;
  20.       
  21.       flvplayback_internal var xml:XML;
  22.       
  23.       flvplayback_internal var height:int;
  24.       
  25.       private var _url:String;
  26.       
  27.       flvplayback_internal var videoTags:Array;
  28.       
  29.       flvplayback_internal var baseURLAttr:Array;
  30.       
  31.       private var _owner:INCManager;
  32.       
  33.       public function SMILManager(param1:INCManager)
  34.       {
  35.          super();
  36.          _owner = param1;
  37.          flvplayback_internal::width = -1;
  38.          flvplayback_internal::height = -1;
  39.       }
  40.       
  41.       flvplayback_internal function parseVideo(param1:XML) : Object
  42.       {
  43.          var _loc2_:Object = null;
  44.          default xml namespace = flvplayback_internal::xml.namespace();
  45.          _loc2_ = new Object();
  46.          if(param1.@src.length() > 0)
  47.          {
  48.             _loc2_.src = param1.@src.toString();
  49.          }
  50.          if(param1["system-bitrate"].length() > 0)
  51.          {
  52.             _loc2_.bitrate = int(param1["system-bitrate"].toString());
  53.          }
  54.          if(param1.@dur.length() > 0)
  55.          {
  56.             _loc2_.dur = flvplayback_internal::parseTime(param1.@dur.toString());
  57.          }
  58.          return _loc2_;
  59.       }
  60.       
  61.       flvplayback_internal function connectXML(param1:String) : Boolean
  62.       {
  63.          _url = flvplayback_internal::fixURL(param1);
  64.          flvplayback_internal::xmlLoader = new URLLoader();
  65.          flvplayback_internal::xmlLoader.addEventListener(Event.COMPLETE,flvplayback_internal::xmlLoadEventHandler);
  66.          flvplayback_internal::xmlLoader.addEventListener(IOErrorEvent.IO_ERROR,flvplayback_internal::xmlLoadEventHandler);
  67.          flvplayback_internal::xmlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,flvplayback_internal::xmlLoadEventHandler);
  68.          flvplayback_internal::xmlLoader.load(new URLRequest(_url));
  69.          return false;
  70.       }
  71.       
  72.       flvplayback_internal function parseSwitch(param1:XML) : void
  73.       {
  74.          var _loc2_:String = null;
  75.          var _loc3_:XML = null;
  76.          default xml namespace = flvplayback_internal::xml.namespace();
  77.          for(_loc2_ in param1.*)
  78.          {
  79.             _loc3_ = param1.*[_loc2_];
  80.             if(_loc3_.nodeKind() != "element")
  81.             {
  82.                continue;
  83.             }
  84.             switch(_loc3_.localName())
  85.             {
  86.                case "video":
  87.                case "ref":
  88.                   flvplayback_internal::videoTags.push(flvplayback_internal::parseVideo(_loc3_));
  89.                   break;
  90.             }
  91.          }
  92.       }
  93.       
  94.       flvplayback_internal function fixURL(param1:String) : String
  95.       {
  96.          var _loc2_:String = null;
  97.          if(/^(http:|https:)/i.test(param1))
  98.          {
  99.             _loc2_ = param1.indexOf("?") >= 0 ? "&" : "?";
  100.             return param1 + _loc2_ + "FLVPlaybackVersion=" + SHORT_VERSION;
  101.          }
  102.          return param1;
  103.       }
  104.       
  105.       flvplayback_internal function xmlLoadEventHandler(param1:Event) : void
  106.       {
  107.          var e:Event = param1;
  108.          try
  109.          {
  110.             if(e.type != Event.COMPLETE)
  111.             {
  112.                _owner.helperDone(this,false);
  113.             }
  114.             else
  115.             {
  116.                flvplayback_internal::baseURLAttr = new Array();
  117.                flvplayback_internal::videoTags = new Array();
  118.                flvplayback_internal::xml = new XML(flvplayback_internal::xmlLoader.data);
  119.                default xml namespace = flvplayback_internal::xml.namespace();
  120.                if(flvplayback_internal::xml == null || flvplayback_internal::xml.localName() == null)
  121.                {
  122.                   throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" No root node found; if url is for an flv it must have .flv extension and take no parameters");
  123.                }
  124.                if(flvplayback_internal::xml.localName() != "smil")
  125.                {
  126.                   throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" Root node not smil");
  127.                }
  128.                flvplayback_internal::checkForIllegalNodes(flvplayback_internal::xml,"element",["head","body"]);
  129.                if(flvplayback_internal::xml.head.length() > 0)
  130.                {
  131.                   flvplayback_internal::parseHead(flvplayback_internal::xml.head[0]);
  132.                }
  133.                if(flvplayback_internal::xml.body.length() < 1)
  134.                {
  135.                   throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" Tag body is required.");
  136.                }
  137.                flvplayback_internal::parseBody(flvplayback_internal::xml.body[0]);
  138.                _owner.helperDone(this,true);
  139.             }
  140.          }
  141.          catch(err:Error)
  142.          {
  143.             _owner.helperDone(this,false);
  144.             throw err;
  145.          }
  146.          finally
  147.          {
  148.             flvplayback_internal::xmlLoader.removeEventListener(Event.COMPLETE,flvplayback_internal::xmlLoadEventHandler);
  149.             flvplayback_internal::xmlLoader.removeEventListener(IOErrorEvent.IO_ERROR,flvplayback_internal::xmlLoadEventHandler);
  150.             flvplayback_internal::xmlLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,flvplayback_internal::xmlLoadEventHandler);
  151.             flvplayback_internal::xmlLoader = null;
  152.          }
  153.       }
  154.       
  155.       flvplayback_internal function checkForIllegalNodes(param1:XML, param2:String, param3:Array) : void
  156.       {
  157.          var _loc4_:String = null;
  158.          var _loc5_:Boolean = false;
  159.          var _loc6_:XML = null;
  160.          var _loc7_:String = null;
  161.          var _loc8_:String = null;
  162.          default xml namespace = flvplayback_internal::xml.namespace();
  163.          var _loc9_:int = 0;
  164.          var _loc10_:* = param1.*;
  165.          while(true)
  166.          {
  167.             for(_loc4_ in _loc10_)
  168.             {
  169.                _loc5_ = false;
  170.                if((_loc6_ = param1.*[_loc4_]).nodeKind() == param2)
  171.                {
  172.                   _loc7_ = String(_loc6_.localName());
  173.                   for(_loc8_ in param3)
  174.                   {
  175.                      if(param3[_loc8_] == _loc7_)
  176.                      {
  177.                         _loc5_ = true;
  178.                         break;
  179.                      }
  180.                   }
  181.                   if(!_loc5_)
  182.                   {
  183.                      break;
  184.                   }
  185.                }
  186.             }
  187.             return;
  188.          }
  189.          throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" " + param2 + " " + _loc7_ + " not supported in " + param1.localName() + " tag.");
  190.       }
  191.       
  192.       flvplayback_internal function parseHead(param1:XML) : void
  193.       {
  194.          default xml namespace = flvplayback_internal::xml.namespace();
  195.          flvplayback_internal::checkForIllegalNodes(param1,"element",["meta","layout"]);
  196.          if(param1.meta.length() > 0)
  197.          {
  198.             flvplayback_internal::checkForIllegalNodes(param1.meta[0],"element",[]);
  199.             flvplayback_internal::checkForIllegalNodes(param1.meta[0],"attribute",["base"]);
  200.             if(param1.meta.@base.length() > 0)
  201.             {
  202.                flvplayback_internal::baseURLAttr.push(param1.meta.@base.toString());
  203.             }
  204.          }
  205.          if(param1.layout.length() > 0)
  206.          {
  207.             flvplayback_internal::parseLayout(param1.layout[0]);
  208.          }
  209.       }
  210.       
  211.       flvplayback_internal function parseBody(param1:XML) : void
  212.       {
  213.          var _loc2_:XML = null;
  214.          var _loc3_:String = null;
  215.          var _loc4_:Object = null;
  216.          default xml namespace = flvplayback_internal::xml.namespace();
  217.          if(param1.*.length() != 1 || param1.*[0].nodeKind() != "element")
  218.          {
  219.             throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" Tag " + param1.localName() + " is required to contain exactly one tag.");
  220.          }
  221.          _loc2_ = param1.*[0];
  222.          _loc3_ = String(_loc2_.localName());
  223.          switch(_loc3_)
  224.          {
  225.             case "switch":
  226.                flvplayback_internal::parseSwitch(_loc2_);
  227.                break;
  228.             case "video":
  229.             case "ref":
  230.                _loc4_ = flvplayback_internal::parseVideo(_loc2_);
  231.                flvplayback_internal::videoTags.push(_loc4_);
  232.                break;
  233.             default:
  234.                throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" Tag " + _loc3_ + " not supported in " + param1.localName() + " tag.");
  235.          }
  236.          if(flvplayback_internal::videoTags.length < 1)
  237.          {
  238.             throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" At least one video of ref tag is required.");
  239.          }
  240.       }
  241.       
  242.       flvplayback_internal function parseTime(param1:String) : Number
  243.       {
  244.          var _loc2_:Object = null;
  245.          var _loc3_:Number = NaN;
  246.          var _loc4_:Number = NaN;
  247.          default xml namespace = flvplayback_internal::xml.namespace();
  248.          _loc2_ = /^((\d+):)?(\d+):((\d+)(.\d+)?)$/.exec(param1);
  249.          if(_loc2_ == null)
  250.          {
  251.             _loc3_ = Number(param1);
  252.             if(isNaN(_loc3_) || _loc3_ < 0)
  253.             {
  254.                throw new VideoError(VideoError.INVALID_XML,"Invalid dur value: " + param1);
  255.             }
  256.             return _loc3_;
  257.          }
  258.          return (_loc4_ = (_loc4_ = (_loc4_ = 0) + uint(_loc2_[2]) * 60 * 60) + uint(_loc2_[3]) * 60) + Number(_loc2_[4]);
  259.       }
  260.       
  261.       flvplayback_internal function parseLayout(param1:XML) : void
  262.       {
  263.          var _loc2_:XML = null;
  264.          var _loc3_:Number = NaN;
  265.          var _loc4_:Number = NaN;
  266.          default xml namespace = flvplayback_internal::xml.namespace();
  267.          flvplayback_internal::checkForIllegalNodes(param1,"element",["root-layout"]);
  268.          if(param1["root-layout"].length() > 1)
  269.          {
  270.             throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" Only one base attribute supported in meta tag.");
  271.          }
  272.          if(param1["root-layout"].length() > 0)
  273.          {
  274.             _loc2_ = param1["root-layout"][0];
  275.             if(_loc2_.@width.length() > 0)
  276.             {
  277.                _loc3_ = Number(_loc2_.@width[0]);
  278.             }
  279.             if(_loc2_.@height.length() > 0)
  280.             {
  281.                _loc4_ = Number(_loc2_.@height[0]);
  282.             }
  283.             if(isNaN(_loc3_) || _loc3_ < 0 || isNaN(_loc4_) || _loc4_ < 0)
  284.             {
  285.                throw new VideoError(VideoError.INVALID_XML,"URL: \"" + _url + "\" Tag " + param1.localName() + " requires attributes width and height.  Width and height must be numbers greater than or equal to 0.");
  286.             }
  287.             flvplayback_internal::width = Math.round(_loc3_);
  288.             flvplayback_internal::height = Math.round(_loc4_);
  289.          }
  290.       }
  291.    }
  292. }
  293.